解決了記很多私鑰的問題之後,
人類面對著另外一個問題,因為對他們(我們啦)來說,記一個種子還是太困難了。
所以BIP 39 就來拯救腦袋渺小的人類了!
如果你有用任何錢包軟體申請一個錢包的話,
你會得到的是一串單字,而不是一串亂碼(當然你也可以得到)
而這串單字,其實就是私鑰的存在,
這就是BIP39做到的事情。
這是從github上截下來的圖,內容是BIP39。
看到第三行 Mnemonic code,是助記詞的意思,就是我前面講的內容。
那究竟這個助記詞是怎麼變來的,
我們繼續看下去。
首先要先建立一個初始熵(就是一串二進位的數字),長度為ENT。
ENT必須是32的倍數,且只能介於128-256 bits。
將這串數字進入SHA-256後取前 ENT/32 個位元作為校驗和,接在初始熵後。
將這總共ENT+ENT/32個位元每11個為一組。
接著用查表的方式將每一組得到一個字。
舉例來說,
如果我們使用ENT=128,
總長度就會是128+128/32=132。
最後會得到132/11=12個單字。
這個單字表有做成各個語言的版本,在這裡可以看到,
裡面有英文、日文、韓文、中文(還分簡體繁體)......
不管甚麼語言,這個表都是經過設計的,
理想的單字表符合一些條件
助記詞若想轉換成種子,需要使用一種密鑰推導函數PBKDF2,
該函數有五個輸入參數:偽隨機函數、主密碼、鹽*、重複次數、需產生多少位元的密碼。
而轉換過程使用的參數分別是:HMAC-SHA512、助記詞、"mnemonic"+"(自選密碼)"、2048、512。
*鹽就只是一個增加破解難度的數字而已,取其加鹽的意象。
最後你就會得到一個熱騰騰的種子,可以用 BIP32 定義的方式生出一個錢包。
以上就是BIP39內容。
回想一下昨天的BIP32,
在master key 底下可以生成出無限多的子密鑰、孫密鑰、...。
所以如果你隨便使用了一個地址,你很難找到他所屬的私鑰在哪裡,於是我們需要BIP44。
BIP44定義了密鑰的路徑規範,這樣的規範定義了各個層級,
使不同帳戶、不同幣種分屬在固定的路徑之下。
路徑的格式如上圖。
第一個m代表的是master node。
第二個purpose固定是44,代表使用BIP44所規範的路徑。
第三個coin_type提供不同加密貨幣的區隔,每個貨幣都有一個編號,
BTC是0、ETH是60,這裡有所有已登記的幣的編號。
第四個account提供不同用途的帳戶。
第五個change分成兩個,0是外部鏈(對外公開)可用來收錢,1是內部鏈(對外不公開)用來找零。
第六層即是你的地址編號,從0開始逐一遞增。
如此一來就定義了整個HD wallet。
圖片來源:
https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki
參考資料:
https://www.youtube.com/watch?v=p_SJKiff5Ng
https://github.com/bitcoin/bips